﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
// Using para utilizar las anotaciones
using System.ComponentModel.DataAnnotations;

namespace MVC3Razor.Models
{
    // Definiendo el modelo de datos del usuario
    public class UserModel
    {
        [Required]
        [StringLength(9, MinimumLength = 3)]
        [Display(Name = "Usuario")]
        [RegularExpression(@"(\S)+", ErrorMessage = "El espacio en blanco no está permitido")]
        [ScaffoldColumn(false)]
        public string UserName { get; set; }

        [Required]
        [StringLength(8, MinimumLength = 3)]
        [Display(Name = "Nombre")]
        [RegularExpression(@"(\S)+", ErrorMessage = "El espacio en blanco no está permitido")]
        public string FirstName { get; set; }

        [Required]
        [StringLength(9, MinimumLength = 2)]
        [Display(Name = "Apellido")]
        [RegularExpression(@"(\S)+", ErrorMessage = "El espacio en blanco no está permitido")]
        public string LastName { get; set; }

        [Required]
        [Display(Name="Provincia")]
        public string City { get; set; }
    }

    public class Users
    {
        // Inicializando la clase con algunos valores para utilizar
        public List<UserModel> listaUsuario = new List<UserModel>();
        public Users()
        {
            listaUsuario.Add(new UserModel
            {
                UserName = "NicoV",
                FirstName = "Nicolas",
                LastName = "Valerio",
                City = "Buenos Aires"
            });
            listaUsuario.Add(new UserModel
            {
                UserName = "ArmandoM",
                FirstName = "Armando",
                LastName = "Mangareli",
                City = "Santa Fe"
            });
        }        

        // Create, Update, Remove de Usuarios.
        public void Create(UserModel userToUpdate)
        {
            // Recorremos nuestra lista de usuarios
            foreach (UserModel us in listaUsuario)
            {
                // Consultamos si existe
                if (us.UserName == userToUpdate.UserName)
                {
                    // Si existe el usuario se detiene la acción y envia un mensaje.
                    throw new System.InvalidOperationException(string.Format("El nombre de usuario {0} ya existe.", us.UserName) );
                }
            }
            // Si no encuentra el usuario se agrega un nuevo usuario a lista.
            listaUsuario.Add(userToUpdate);
        }
        public void Update(UserModel userToUpdate)
        {
            // Recorremos la lsita de usarios
            foreach (UserModel us in listaUsuario)
            {
                // Consultamos si existe
                if (us.UserName == userToUpdate.UserName)
                {
                    // Si existe removemos el nodo del usuario actual yagregamos el nuevo.                    
                    listaUsuario.Remove(us);
                    listaUsuario.Add(userToUpdate);
                    // Terminamos la acción.
                    break;
                }
            }
        }        
        public void Remove(string usrName)
        {
            // Recorremos la lista de usarios
            foreach (UserModel us in listaUsuario)
            {
                // Consultamos si existe
                if (us.UserName == usrName)
                {
                    // Si existe lo removemos y terminamos la acción
                    listaUsuario.Remove(us);
                    break;
                }
            }
        }

        // Devuelve un usuario.
        public UserModel GetUser(string uID)
        {
            // Creamos una varible de tipo UserModel
            UserModel usrModel = null;
            // Recorremos la lista de usuarios
            foreach (UserModel us in listaUsuario)
                // Consultamos si existe
                if (us.UserName == uID)
                    // Si existe se lo asignamos a la variable creada.
                    usrModel = us;
            // Retornamos la variable
            return usrModel;
        }
    }    
}
